package main

import (
    "fmt"
    "errors"
)
// Go中可以抛出一个panic的异常，然后在defer中通过recover捕获这个异常，然后正常处理。
func foo() {
    fmt.Printf("即将出错, 出错之后跳转到defer func \n")
    panic(errors.New("i'm a bug"))
    return
}

func test() (result int) {
    fmt.Println("2")     // 0
     defer func() {
        if r := recover(); r != nil {
            fmt.Println("Cache Exception:", r)
            fmt.Println("捕获到异常，进行处理\n")
        }
    }()

    fmt.Println("3")   
    foo()
    fmt.Println("4")   
    return 10
}

func main() {
    fmt.Println("1")   
    fmt.Println(test())
    fmt.Println("5")   
}


